package main

import "fmt"

type Student struct {
}

// input type judge
func judge(vals ...interface{}) {
	for _, val := range vals {
		switch val.(type) {
		case int, int8, byte, rune, int64:
			fmt.Printf("int val is %v, type is %[1]T\n", val)
		case float32, float64:
			fmt.Printf("int is %v, type is %[1]T\n", val)
		case string:
			fmt.Printf("string is %v, type is %[1]T\n", val)
		case Student, *Student:
			fmt.Printf("Student is %v, type is %[1]T\n", val)
		default:
			fmt.Println("invalid type")
		}
	}
}

func main() {
	n1 := 1.1
	n2 := 1
	n3 := "hello"
	var n4 byte = 125
	var n5 rune = 122
	stu1 := Student{}
	stu2 := &Student{}
	judge(n1, n2, n3, n4, n5, stu1, stu2)
}
